<?php
/**
 * Description of modelUser
 *
 * @author bach.ngo
 * @date 22-07-2013
 */
class User_model extends CI_Model{
	private $_tableName = 'tbl_user';
	public function __construct() {
		parent::__construct();
		$this->load->database();
		//$this->load->library('session');
	}

	public function get_user($openId){
		$this->db->select('*');
		$this->db->where('id',$openId);
		$this->db->limit(1);
		$query = $this->db->get('tbl_user');
		return $query->result_array();
	}

	/**
	 * @Author: bach.ngo
	 * @Date: 25-07-2013
	 * @Desc: Hàm lấy danh sách tên user
	 * @Param:
	 *      $nickname String  Tên đăng nhập SNS
	 *      $email String  Email đăng nhập SNS
	 *      $limit integer  Số bản ghi trên 1 trang trả về ( Records per page )
	 *      $offset integer  Số thứ tự trang ( page number )
	 *      $detail boolean  Có lấy thông tin chi tiết hay không
	 * @Return: array
	 */
	public function list_user($nickname,$email,$limit,$offset,$detail){
		if(!$detail || !isset($detail) || is_null($detail) || $detail = 0){
			$this->db->select('id','nickname','email');
		}else{
			$this->db->select('*');
		}
		if(isset($nickname)&& strlen($nickname)>0 && !is_null($nickname)){
			$this->db->where('nickname',$nickname);
		}
		if(isset($email) && strlen($email)>0 && !is_null($email)){
			$this->db->where('email',$email);
		}
		$this->db->order_by('id', 'DESC');
		if(isset($limit) && is_numeric($limit) && $limit > 0
				&& isset($offset) && is_numeric($offset) && $offset > 0){
			$query = $this->db->get($this->_tableName, $limit, $offset);
		}else{
			$query = $this->db->get($this->_tableName);
		}
		return $query->result_array();
	}
	/*
	 * End
	*/

	/**
	 * @Author: bach.ngo
	 * @Date: 25-07-2013
	 * @Desc: Hàm lấy danh sách chi tiết các user
	 * @Param:
	 */
	public function list_detail_user($nickname,$email,$limit,$offset){
		$this->db->select('*');
		if(isset($nickname)&& strlen($nickname)>0 && !is_null($nickname)){
			$this->db->where('nickname',$nickname);
		}
		if(isset($email) && strlen($email)>0 && !is_null($email)){
			$this->db->where('email',$email);
		}
		$this->db->order_by('id', 'DESC');
		if(isset($limit) && is_numeric($limit) && $limit > 0
				&& isset($offset) && is_numeric($offset) && $offset > 0){
			$query = $this->db->get($this->_tableName, $limit, $offset);
		}else{
			$query = $this->db->get($this->_tableName);
		}
		return $query->result_array();
	}
	/*
	 * End
	*/

	/**
	 * @Author: bach.ngo
	 * @Date: 25-07-2013
	 * @Desc: Hàm thêm các user mới đăng ký
	 * @Param:
	 *      $data Array Mảng chứa các thông tin user ứng với các trường trong db
	 * @Return: id của user mới được thêm, nếu đã được đăng ký thì trả về 0
	 */
	public function register_user($data){
		$nickname = $data['nickname'];
		$id = 0;
		if(!$this->check_user($nickname)){
			$this->db->set('created','NOW()',FALSE);
			$this->db->insert($this->_tableName, $data);
			$id = $this->db->insert_id();
		}
		return ($id==0)?FALSE:TRUE;
	}
	/*
	 * End
	*/

	/**
	 * @Author: bach.ngo
	 * @Date: 25-07-2013
	 * @Desc: Hàm kiểm tra xem user này đã tồn tại hay chưa
	 * @Param:
	 *      $nickname String Tên user đăng nhập
	 * @Return: boolean true: đã tồn tại , false: chưa tồn tại
	 */
	public function check_user($nickname){
		$this->db->select('id');
		$this->db->where('nickname', $nickname);
		$query = $this->db->get($this->_tableName);
		$count = $query->num_rows();
		return ($count > 0)?TRUE:FALSE;
	}
	/*
	 * End
	*/

	/**
	 * @Author: bach.ngo
	 * @Date: 25-07-2013
	 * @Desc: Hàm kiểm tra xem user này đã tồn tại hay chưa
	 * @Param:
	 *      $nickname String Tên user đăng nhập
	 * @Return: boolean true: đã tồn tại , false: chưa tồn tại
	 */
	public function check_email($email){
		$this->db->select('id');
		$this->db->where('email', $email);
		$query = $this->db->get($this->_tableName);
		$count = $query->num_rows();
		return ($count > 0)?TRUE:FALSE;
	}
	/*
	 * End
	*/

	/**
	 * @desc Hàm kiểm tra user login có đúng không
	 * @param string $username
	 * @param string $password
	 * @return boolean
	 */
	public function login($username,$password){
		$this->db->select('id','nickname');
		$this->db->from($this->_tableName);
		$this->db->where('nickname',$username);
		//Nếu password đã được mã hóa bên ngoài thì bỏ hàm md5 ở đây
		$this->db->where('password',  $password);
		$this->db->limit(1);
		$query = $this->db->get();
		$count = $query->num_rows();
		return ($count > 0)?$query->row_array():FALSE;
	}
	/*
	 * End
	*/
	/**
	 *
	 * @param unknown $name
	 * @param unknown $link
	 * @param unknown $email
	 * @param unknown $social_user_id
	 * @param unknown $gender
	 * @param unknown $avatar_link
	 * @return boolean
	 */

	public function facebook_register($name,$link,$email,$social_user_id,$gender,$avatar_link) {

		if ($this->check_email($email)) {
			$user = $this->get_user_by_email($email);

			return $user->id;
		}
		$data = array (
				'is_social_user' => 1,
				'nickname' => $name,
				'email' => $email,
				'gender'=>$gender,
				'figureurl'=>$avatar_link
		);
		$this->db->insert($this->_tableName, $data);
		$id = $this->db->insert_id();
		if ($id > 0) {
			$social_data = array (
					'social_id' => 1,
					'user_id' => $id,
					'social_user_id' =>$social_user_id,
					'social_user_link'=> $link
			);
			$this->db->insert('tbl_social_user', $social_data);
		}
		return true;
	}
	public function facebook_update() {
			
	}
	public function get_user_by_email($email) {
		$this->db->where('email',$email);
		$query = $this->db->get('tbl_user');
		if($query->num_rows() > 0){
			foreach($query->result() as $row){
				return $row;
			}
		}else{
			return null;
		}
	}
	public function get_app_friends_facebook($user_id) {
	
		$this->db->where(array('user_id'=>$user_id, 'social_id' => 1));
		$query = $this->db->get('tbl_social_user');
		if($query->num_rows() > 0){
			foreach($query->result() as $row){
				$user_info = $row;
			}
		}else{
			return null;
		}
		parse_str( $_SERVER['QUERY_STRING'], $_REQUEST );
		$CI = & get_instance();
	
		$CI->config->load("facebook",TRUE);
		$config = $CI->config->item('facebook');
		$this->load->library('Facebook', $config);
// 		$session = array(
// 				'uid' => $user_info->social_user_id,
// 				'session_key' => '146709862197382',
// 				'secret' => 'f2a7dc28496db8516d77ef81d9b6163e',
// 				'access_token' => ''
// 		);
		
// 		ksort($session);
// 		$sessionStr = '';
// 		foreach($session as $sessionKey => $sessionValue) $sessionStr .= implode('=', array($sessionKey, $sessionValue));
// 		$session['sig'] = md5($sessionStr.'f2a7dc28496db8516d77ef81d9b6163e');
// 		$session = $this->facebook->getSession();
// 		var_dump($session); die();
		
		//$this->facebook->setSession($session, false);
		$userId = $this->facebook->getUser();
		//printf($userId);
		// If user is not yet authenticated, the id will be zero
		if($userId == 0){
			// Generate a login url
			return null;
			
		}
		
		try {
			$friend_list = $this->facebook->api(array(
					'method'=>'fql.query',
					'query'=>'SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = '.$user_info->social_user_id. ') AND is_app_user = 1'
			));
		}
		catch (Exception $e) {
			return null;
		}
		if (count($friend_list)> 0) {
			$result_array = array();
			foreach ($friend_list as $friend) {
				$this->db->where('social_user_id',$friend['uid']);
				$query = $this->db->get('tbl_social_user');
				if($query->num_rows() > 0){
					foreach($query->result() as $row){
						$friend_info = $row;
					}
					$result_array[] = array('openid'=>$friend_info->user_id);
				}
			}
			return $result_array;
		}
		else {
			return null;
		}


	}

	public function check_session_id($user_id,$session_id){
		$this->db->select('id');
		$this->db->where('id', $user_id);
		$this->db->where('is_logged', 1);
		$this->db->where('session_id', $session_id);
		$query = $this->db->get($this->_tableName);
		$count = $query->num_rows();
		return ($count > 0)?TRUE:FALSE;
	}

	public function update_logged_user($user_id,$data){
		$this->db->where('id',$user_id);
		$id = $this->db->update($this->_tableName,$data);
	}
}



?>
